from django.db import models


# Create organization models here.
class OrganizationModel(models.Model):
    """
    企业（Organization）模型类，用于存储企业相关信息。
    """
    # 企业名称
    name = models.CharField(max_length=255, unique=True)
    # 企业简介或描述
    description = models.TextField(blank=True)
    # 企业邮箱
    email = models.EmailField(unique=True)
    # 企业联系电话
    phone_number = models.CharField(max_length=15, blank=True)
    # 企业地址
    address = models.CharField(max_length=255, blank=True)
    # 企业密码
    password = models.CharField('密码', max_length=150, default='Aa123456')
    # 企业注册时间
    registration_date = models.DateTimeField(auto_now_add=True)
    # 企业认证状态，默认为False，需要后台审核
    is_verified = models.BooleanField(default=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'organization'
        verbose_name = "企业信息"
        verbose_name_plural = "企业信息"
        ordering = ['-registration_date']


class NoticeModel(models.Model):
    """
    通告模型类，用于表示一个通告信息

    属性:
    - title: 通告的标题，字符字段
    - content: 通告的内容，文本字段
    - pub_date: 通告的发布时间，日期时间字段，自动添加当前时间
    - publisher: 通告的发布者，外键连接到OrganizationModel模型

    方法:
    - __str__: 返回通告的标题字符串
    """

    # 定义通告模型的字段
    title = models.CharField(max_length=200, verbose_name='通告标题')
    content = models.TextField(verbose_name='通告内容')
    pub_date = models.DateTimeField(auto_now_add=True, verbose_name='发布时间')

    # 定义与组织模型的关联关系
    publisher = models.ForeignKey(
        OrganizationModel,
        on_delete=models.CASCADE,  # 当关联的组织被删除时，自动删除相应的通告
        related_name='notices',  # 设置反向关系的名称
        verbose_name='发布者'
    )

    def __str__(self):
        """
        返回通告的标题字符串，用于在管理界面等地方显示通告的简要信息

        返回值:
        - title: 通告的标题字符串
        """
        return self.title

    class Meta:
        """
        通告模型的元数据配置类

        属性:
        - verbose_name: 单数形式的人类可读名称
        - verbose_name_plural: 复数形式的人类可读名称
        - db_table: 指定数据库表的名称
        - ordering: 默认的排序方式，按照发布日期降序排列
        """
        verbose_name = '通告'
        verbose_name_plural = '通告'
        db_table = 'notice'  # 指定数据库表名为notice
        ordering = ['-pub_date']  # 默认按照发布日期降序排列

